#ifndef SCENEOBJECT_H
#define SCENEOBJECT_H

#include <vector>
#include "UniversalIncludes.h"

class SceneObject
{
    // Fields
    public:
        // Object properties
        float x, y, z;
        float scale_x, scale_y, scale_z;
        float rotation_x, rotation_y, rotation_z;
        float offset_x, offset_y, offset_z;
        bool visible, updatable, eventable;
        // Graphing
        SceneObject* parent;
    private:
        std::vector<SceneObject*> children;

    // Methods
    public:
        SceneObject();
        virtual ~SceneObject();
        // Graphing
        void addChild(SceneObject* child);
        void removeChild(SceneObject* child);
        void removeChildren();
        void deleteChild(SceneObject* child);
        void deleteChildren();
        float getGlobalX();
        float getGlobalY();
        // Engine
        virtual void draw(){};
        void drawRecursive(bool ignoreSelf, bool ignoreChildren);
        virtual void update(Uint32* deltaTime){};
        void updateRecursive(Uint32* deltaTime);
        virtual void handleEvents(SDL_Event* event){};
        void handleEventsRecursive(SDL_Event* event);
    private:
};

#endif
